package com.ruoyi.system.api.service;

import com.ruoyi.system.api.ResponseWithData;
import com.ruoyi.system.api.domain.ReportInfo;
import com.ruoyi.system.api.domain.ServiceNotice;

import java.util.List;
import java.util.Map;

/**
 * 服务派单主 (数据来源于CC端主动调用)Service接口
 *
 * @author shihx
 * @date 2020-03-02
 */
public interface IServiceNoticeService {
    /**
     * 查询服务派单主 (数据来源于CC端主动调用)
     *
     * @param id 服务派单主 (数据来源于CC端主动调用)ID
     * @return 服务派单主 (数据来源于CC端主动调用)
     */
    public ServiceNotice selectServiceNoticeById(Long id);

    /**
     * 查询服务派单主 (数据来源于CC端主动调用)列表
     *
     * @param serviceNotice 服务派单主 (数据来源于CC端主动调用)
     * @return 服务派单主 (数据来源于CC端主动调用)集合
     */
    public List<ServiceNotice> selectServiceNoticeList(ServiceNotice serviceNotice);

    /**
     * 新增服务派单主 (数据来源于CC端主动调用)
     *
     * @param serviceNotice 服务派单主 (数据来源于CC端主动调用)
     * @return 结果
     */
    public int insertServiceNotice(ServiceNotice serviceNotice);

    /**
     * 修改服务派单主 (数据来源于CC端主动调用)
     *
     * @param serviceNotice 服务派单主 (数据来源于CC端主动调用)
     * @return 结果
     */
    public int updateServiceNotice(ServiceNotice serviceNotice);

    /**
     * 批量删除服务派单主 (数据来源于CC端主动调用)
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    public int deleteServiceNoticeByIds(String ids);

    /**
     * 删除服务派单主 (数据来源于CC端主动调用)信息
     *
     * @param id 服务派单主 (数据来源于CC端主动调用)ID
     * @return 结果
     */
    public int deleteServiceNoticeById(Long id);

    /**
     * 获取工程师下待接受、进行中服务单的数量接口
     *
     * @param EnginnerId
     * @methodName: getMyPlanCount
     * @description: TODO
     * @return: com.ruoyi.system.api.ResponseWithData<?>
     * @author: shihx
     * @date: 2020/3/2 15:56
     **/
    public ResponseWithData<?> getMyPlanCount(String EnginnerId, String customerName, String serviceType) throws Exception;

    public ResponseWithData<?> getMyTeamPlanCount(String EnginnerId, String customerName, String serviceType, String enginnerName) throws Exception;

    /**
     * 获取工程师下待接受、进行中服务单列表的接口
     *
     * @param EnginnerId
     * @param state
     * @methodName: getMyServiceNotice
     * @description: TODO
     * @return: com.ruoyi.system.api.ResponseWithData<?>
     * @author: shihx
     * @date: 2020/3/3 9:34
     **/
    public ResponseWithData<?> getMyServiceNotice(String EnginnerId, String state, String customerName, String serviceType) throws Exception;

    /**
     * 获取工程师下待接受、进行中服务单详情的接口
     *
     * @param ServiceNoticeId
     * @param EnginnerId
     * @methodName: getMyServiceNoticeDetail
     * @description: TODO
     * @return: com.ruoyi.system.api.ResponseWithData<?>
     * @author: shihx
     * @date: 2020/3/3 13:23
     **/
    public ResponseWithData<?> getMyServiceNoticeDetail(String ServiceNoticeId, String EnginnerId) throws Exception;

    /**
     * 2.3获取TL列表接口
     *
     * @param TeamleaderId
     * @param TeamleaderName
     * @methodName: getTeamleaderList
     * @description: TODO
     * @return: com.ruoyi.system.api.ResponseWithData<?>
     * @author: shihx
     * @date: 2020/3/3 15:27
     **/
    public ResponseWithData<?> getTeamleaderList(String TeamleaderId, String TeamleaderName) throws Exception;

    /**
     * 2.4TL转派其他TL接口
     *
     * @param TeamleaderId
     * @param serviceNo
     * @param NewTeamleaderId
     * @methodName: TransferTL
     * @description: TODO
     * @return: com.ruoyi.system.api.ResponseWithData<?>
     * @author: shihx
     * @date: 2020/3/3 16:40
     **/
    public ResponseWithData<?> TransferTL(String TeamleaderId, String serviceNo, String NewTeamleaderId) throws Exception;



    /**
     * 2.4TL转派其他TL接口
     *
     * @param TeamleaderId
     * @param serviceNo
     * @param NewTeamleaderId
     * @methodName: TransferTL
     * @description: TODO
     * @return: com.ruoyi.system.api.ResponseWithData<?>
     * @author: shihx
     * @date: 2020/3/3 16:40
     **/
    public ResponseWithData<?> TransferTL2(String TeamleaderId, String serviceNo, String NewTeamleaderId) throws Exception;
    /**
     * TL确定派单接口
     *
     * @param ServiceNoticeId
     * @param serviceNo
     * @param EnginnerIds
     * @param EnginnerNames
     * @methodName: ConfirmationDispatch
     * @description: TODO
     * @return: com.ruoyi.system.api.ResponseWithData<?>
     * @author: shihx
     * @date: 2020/3/5 13:42
     **/
    public ResponseWithData<?> ConfirmationDispatch(String ServiceNoticeId, String serviceNo, String EnginnerIds, String EnginnerNames,String assignId) throws Exception;

    /**
     * 接受服务单、签到服务单、签离服务单、填写工作日志 查询关联服务单接口
     *
     * @param ServiceNoticeId
     * @param EnginnerId
     * @param signInTime
     * @param signIn
     * @param fillInLog
     * @param state
     * @param planId
     * @methodName: AssociatedCustomers
     * @description: TODO
     * @return: com.ruoyi.system.api.ResponseWithData<?>
     * @author: shihx
     * @date: 2020/3/11 9:56
     **/
    public ResponseWithData<?> AssociatedCustomers(String ServiceNoticeId, String EnginnerId, String signInTime, String signIn, String fillInLog, String state, String planId) throws Exception;


    /**
     *  查询单个
     *
     * @param ServiceNoticeId
     * @param EnginnerId
     * @param signInTime
     * @param signIn
     * @param fillInLog
     * @param state
     * @param planId
     * @methodName: AssociatedCustomers
     * @description: TODO
     * @return: com.ruoyi.system.api.ResponseWithData<?>
     * @author: shihx
     * @date: 2020/3/11 9:56
     **/
    public ResponseWithData<?> AssociatedCustomersByMySelf(String ServiceNoticeId, String EnginnerId, String signInTime, String signIn, String fillInLog, String state, String planId) throws Exception;


    /**
     * 接受服务单、签到服务单、签离服务单、填写工作日志 查询关联服务单接口
     *
     * @param ServiceNoticeId
     * @param EnginnerId
     * @param signInTime
     * @param signIn
     * @param fillInLog
     * @param state
     * @param planId
     * @methodName: AssociatedCustomers
     * @description: TODO
     * @return: com.ruoyi.system.api.ResponseWithData<?>
     * @author: shihx
     * @date: 2020/3/11 9:56
     **/
    public ResponseWithData<?> AssociatedCustomersByBatch(String ServiceNoticeId, String EnginnerId, String signInTime, String signIn, String fillInLog, String state, String planId) throws Exception;


    /**
     * 接受服务单、签到服务单、签离服务单、填写工作日志 查询关联服务单接口
     *
     * @param ServiceNoticeId
     * @param EnginnerId
     * @param signInTime
     * @param state
     * @methodName: AssociatedCustomers
     * @description: TODO
     * @return: com.ruoyi.system.api.ResponseWithData<?>
     * @author: shihx
     * @date: 2020/3/11 9:56
     **/
    public ResponseWithData<?> associatedCustomersByReport(String ServiceNoticeId, String EnginnerId, String signInTime,  String state) throws Exception;
    /**
     * 获取工程师下各状态服务单列表的接口
     *
     * @param EnginnerId
     * @param state
     * @methodName: getServiceNoticeList
     * @description: TODO
     * @return: com.ruoyi.system.api.ResponseWithData<?>
     * @author: sjy
     * @date: 2020年3月9日14:20:16
     **/
    public ResponseWithData<?> getServiceNoticeList(String EnginnerId, Long state, String ServiceNoticeId, String customerName, String serviceType, String instrumentSerialNumber) throws Exception;


    /**
     * 获取工程师下已关闭服务单列表的接口
     *
     * @param EnginnerId
     * @param AppState
     * @param serviceNo
     * @methodName: getClosedNoticeList
     * @description: TODO
     * @return: com.ruoyi.system.api.ResponseWithData<?>
     * @author: sjy
     * @date: 2020年3月9日14:41:52
     **/
    public ResponseWithData<?> getClosedNoticeList(String EnginnerId, Long AppState, String serviceNo, String customerName, String serviceType, String instrumentSerialNumber) throws Exception;

    /**
     * 获取TL下待指派和服务中的服务通知接口
     *
     * @param serviceNotice
     * @methodName: getTeamServiceNotice
     * @description: TODO
     * @return: com.ruoyi.system.api.ResponseWithData<?>
     * @author: sjy
     * @date: 2020年3月9日14:41:52
     **/
    public List<ServiceNotice> getTeamServiceNotice(ServiceNotice serviceNotice);

    public Integer getTeamServiceNoticeCount(ServiceNotice serviceNotice);

    /**
     * 获取FSE下维护报告列表（未关闭的服务）
     *
     * @param serviceNotice
     * @return
     */
    public List<ServiceNotice> getFseReportNotice(ServiceNotice serviceNotice);

    /**
     * 获取FSE下维护报告列表（所有的报告）
     *
     * @param serviceNotice
     * @return
     */
    public List<ServiceNotice> getFseReportNoticeAll(ServiceNotice serviceNotice);


    /**
     * 获取FSE下维护报告列表（未关闭的服务）
     *
     * @param serviceNotice
     * @return
     */
    public List<ServiceNotice> getFseReportNoticeSubmitByErrorOrHot(ServiceNotice serviceNotice);

    /**
     * CC调用接口 关闭服务通知
     *
     * @param serviceNo     服务派单号
     * @param closePersonId 关闭服务通知人员ID
     * @return com.ruoyi.system.api.ResponseWithData
     * @author yzg
     * @date 2020/4/3 2:10 下午
     */
    public ResponseWithData closeServiceNotice(String serviceNo, String closePersonId) throws Exception;

    /**
     * 查看服务通知详情
     *
     * @param serviceNo
     * @param serviceNoticeId
     * @param enginnerId
     * @return com.ruoyi.system.api.ResponseWithData
     * @author yzg
     * @date 2020/4/14 4:54 下午
     */
    public ResponseWithData getServiceNoticeDetailsAndReportCount(String serviceNo, Long serviceNoticeId, Long planId, Long enginnerId);

    /**
     * 查询CC端服务通知（处理）
     *
     * @param enginnerId
     * @return com.ruoyi.system.api.ResponseWithData
     * @author yzg
     * @date 2020/4/15 2:09 下午
     */
    ResponseWithData getCCServiceNoticeList(Long enginnerId,String serviceNo,String custName,String instrumentSerialNumber,String startTime,String endTime);

    /**
     * 待指派有搜索条件的查询
     *
     * @param enginnerId
     * @param state
     * @param customerName
     * @param serviceType
     * @param instrumentSerialNumber
     * @methodName: getAssignServiceNotice
     * @description: TODO
     * @return: com.ruoyi.system.api.ResponseWithData<?>
     * @author: shihx
     * @date: 2020-04-16 13:53
     **/
    public ResponseWithData<?> getAssignServiceNotice(String enginnerId, String state, String customerName, String serviceType, String instrumentSerialNumber) throws Exception;

    Integer getAssignServiceNoticeCount(String enginnerId, String state);
    /**
     * 查询团队服务通知接口
     *
     * @param serviceNotice
     * @methodName: getTeamServiceNotices
     * @description: TODO
     * @return: java.util.List<com.ruoyi.system.api.domain.ServiceNotice>
     * @author: shihx
     * @date: 2020-04-23 11:08
     **/
    public List<ServiceNotice> getTeamServiceNotices(ServiceNotice serviceNotice);

    public List<ServiceNotice> getTeamServiceNoticesBytl(ServiceNotice serviceNotice);



    public Integer getTeamServiceNoticesCount(ServiceNotice serviceNotice);

    /**
     * 查询没有日志服务的报告
     *
     * @param serviceNotice
     * @methodName: getTeamServiceNotices
     * @description: TODO
     * @return: java.util.List<com.ruoyi.system.api.domain.ServiceNotice>
     * @author: shihx
     * @date: 2020-04-23 11:08
     **/
    public List<Map<String, Object>> selectServiceNoticeListByNotLog(Map<String, Object> serviceNotice);

    public List<ReportInfo> getUnSubmitReport(String serviceNo);

    Integer getServiceNoticeListCount(String enginnerId, String state);

    public List<ServiceNotice> getAllCustomerSignListModify(Map map);
}
